import { Context } from '../../core';
import { transformModules } from './transformModules';
import { groupChunks } from './groupChunk';
import { generateChunksCode } from './generateChunksCode';
import { generateFiles } from './generateFiles';
import { clearOutputDir } from '../../utils';

export async function generate(context: Context) {
  // 生成文件前, 清空原来的 dist 目录
  clearOutputDir(context.config.output.path);
  // 转换所有模块的 ast, 以便于浏览器可以识别最终的代码
  transformModules(context);
  // 将模块组合成一个个 chunk, 每一个 chunk 对应最终需要生成的一个文件
  groupChunks(context);
  // 为每一个 chunk 生成运行时代码
  generateChunksCode(context);
  // 生成文件
  await generateFiles(context);
  await context.plugin_driver.generateEnd(context);
}
